package com.ia2014.tp.portal2.ejb;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import org.apache.log4j.Logger;

import com.ia2014.tp.portal2.entities.Modulo;
import com.ia2014.tp.portal2.enums.ModulosEnum;
import com.ia2014.tp.portal2.utils.Helper;
import com.ia2014.tp.portal2.vo.ModuloVO;

/**
 * Session Bean implementation class AdministradorConfigBean
 */
@Stateless
public class AdministradorConfigBean implements AdministradorConfig {

	
	private static Logger logger = Logger.getLogger(AdministradorConfigBean.class);

	@PersistenceContext(unitName = "DAO")
    private EntityManager em;

	
	/*
	@Override
	public String getURLWebServiceConfirmacionCompraLogisticaMonitoreo(){
		//TODO Agregar codigo para tomar los valores desde la configuracion
		
		return "http://192.168.0.23:8080/Monitoreo/WSMonitoreo?wsdl";
		
	}
    
	
	@Override
	public boolean getEnvioAsyncLogLogidaMonitoreo(){
		//TODO Agregar codigo para tomar los valores desde la configuracion
		return true;
		
	}
   
	@Override
	public String getQueueLogLogisticaMonitoreo(){
		//TODO Agregar codigo para tomar los valores desde la configuracion
		return "queue/monitoreo";
	}
	
	@Override
	public String getURLQueueLogLogisticaMonitoreo(){
		//TODO Agregar codigo para tomar los valores desde la configuracion
		return "http://192.168.0.23:4447";
	}
	
	@Override
	public String getUserQueueLogLogisticaMonitoreo(){
		//TODO Agregar codigo para tomar los valores desde la configuracion
		return "monitoreo";
		
	}
	
	@Override
	public String getPasswordQueueLogLogisticaMonitoreo(){
		//TODO Agregar codigo para tomar los valores desde la configuracion
		return "monitoreo1.0";
		
	}

	@Override
	public String getURLWebServiceLogLogisticaMonitoreo(){
		//TODO Agregar codigo para tomar los valores desde la configuracion
		return "http://192.168.0.23:8080/IA_TPO_WEB/RecepcionInformeAuditoria?wsdl";
	}

	@Override
	public boolean getAuditarStacktraceNoResultException(){
		return false;
	}
	*/
	
	public AdministradorConfigBean(){
		
	}
	
	@Override
	public List<Modulo> getModulos() {
		
		try{
			List<Modulo> modulos = new ArrayList<Modulo>();
		
			Query query = em.createQuery("from Modulo");
			modulos = query.getResultList();	
			
			return modulos;
		}
		catch (NoResultException re){
			
			logger.warn("No se obtuvieron de Modulos de la Configuracion.");
			return null;
		}
		catch (Exception e){
			
			logger.error("Error al tratar de obtener los Modulos de la Configuracion.");
			logger.error(e.toString());
			logger.debug("Stacktrace", e);
			
			return null;
		}
	}
	

	@Override
	public ModuloVO getModuloByTipo(ModulosEnum tipoModulo){
		
		try {
			
			Query query = em.createQuery("from Modulo m where m.class = :tipoModulo");
		
			if (tipoModulo == ModulosEnum.DEPOSITO) {
				
				query.setParameter("tipoModulo", "deposito");
				
			} else if (tipoModulo == ModulosEnum.DESPACHO) {
				
				query.setParameter("tipoModulo", "despacho");
				
			} else if (tipoModulo == ModulosEnum.LOGISTICA) {
				
				query.setParameter("tipoModulo", "logistica");
				
			} else if (tipoModulo == ModulosEnum.PORTAL ) {
				
				query.setParameter("tipoModulo", "portal");
				
			} else  {
				
				query.setParameter("tipoModulo", "");
				
			}
			
			Modulo modulo = (Modulo) query.getSingleResult();
			
			return modulo.getVO();
		
		} catch (NoResultException e) {
		
			logger.warn("No se obtuvo el Modulo Tipo " + tipoModulo.toString()); 
			
			//if (administradorConfig.getAuditarStacktraceNoResultException())
			//	logger.debug("Stacktrace", e);
			return null;
			
		} catch(Exception e){
			
			logger.error("Error al tratar de obtener el Modulo Tipo " + tipoModulo.toString());
			logger.error(e.toString());
			logger.debug("Stacktrace", e);
			
			return null;
		}
		
	}
	
	public void actualizarConfiguracion(){
		
		Helper.actualizarModulos(this.getModulos());
			
	}
}
